//引入切片制造函数、
import {createSlice} from "@reduxjs/toolkit";

//设置一个user 的原始模板
const user = {
    userId:sessionStorage.getItem('userId')||'',//登录用户的ID
    token:sessionStorage.getItem('token')||'',//登录用户的凭证
    avator:sessionStorage.getItem('avator')||'',//登录用户的头像
    route:JSON.parse(sessionStorage.getItem('route'))||[],//登录用户的路由权限
}
//设置一个数据的初始模板
const initialState = {
    //用来保存用户相关的数据的
    user,
    //保存当前操作的状态，请求中、请求成功、请求失败
    status: 'idle',
}

//创建userSelice 并暴露
export const userSelice = createSlice({
    name:'userSelice' , //action 的命名空间
    initialState:initialState,//以initialState数据为模板的数据初始化
    reducers:{//同步对数据的操作方法 ，直接在元数据修改数据即可，或者替换原来的数据（但是需要return）
        //登录- 同步 - 将api 请求的数据写入user 里
        loginMutation:(state,action)=>{
            state.user = action.payload
        },
        //登出- 同步 - 将user 里的数据都清空为原始数据
        logoutMutation:(state)=>{
            state.user = user
        }
    }
})
//异步执行 登录
export const loginAction = (user)=>{
    return (dispatch) => {
        console.log('去调用api',user)
        dispatch(loginMutation(user))
        return new Promise((resolve)=>{
            sessionStorage.setItem('userId',user.userId)
            sessionStorage.setItem('token',user.token)
            sessionStorage.setItem('route',JSON.stringify(user.route))
            sessionStorage.setItem('avator',user.avator)
            resolve({state:true})
        })

}
}

//将所有的对数据操作的方法都暴露出去 - 使用结构写法
export const {loginMutation ,logoutMutation } = userSelice.actions

//默认暴露 reducer
export default userSelice.reducer